home *** CD-ROM | disk | FTP | other *** search
- include "prtequ.h"
-
- *
- * CItoh 8510S driver
- *
- CYAN equ 2
- MAGENTA equ 1
- YELLOW equ 4
- BLACK equ 0
-
- CR equ $d
- LF equ $a
- FF equ $c
- ESC equ $1b
-
- SECTION printer,CODE,PUBLIC
- ***************************************************************
- ***************************************************************
- ***************************************************************
- dumbentry:
- clr.l d0
- rts
-
- dc.l "PRNT"
- dc.w 200
-
- *
- *
- * distribute the calls to the appropriate routines
- *
- mx80: move.l a0,table
- lsl.w #2,d0
- lea prntbl,a1
- move.l 0(a1,d0.w),a1
- jmp (a1)
-
- *
- * identify who I am, and set up who I like to speak to.
- *
- p_ident:
- move.l #driver,pdrvrnm(a0) ;pointer to string for driver name
- move.w #PARALLEL+ASCENDING,device(a0)
- prtok: moveq #1,d0
- rts
-
- *
- * initialize the table of printer specific routines
- *
- p_init: clr.b pdl(a0) ;no page description language
- clr.b pmult(a0) ;automatically print mulitiple copies?
- clr.b pman(a0) ;handle manual feed?
- move.b #PRT_CMYK,ptype(a0) ;printer type?
- move.l sendout(a0),send+2 ;self-modifing code, tisk, tisk!
-
- *
- * pminlft and pmaxw must be evenly divisible by 16
- * this is the part that should be worked out
- *
-
- move.w pdensity(a0),d0
- cmp.w #7,d0
- bcs pint1
- moveq #6,d0
- pint1: lsl.w #1,d0
-
- lea xdpi_tbl,a1
- move.w 0(a1,d0.w),pxdpi(a0) ;x resolution
- lea ydpi_tbl,a1
- move.w 0(a1,d0.w),pydpi(a0) ;y resolution
- lea minl_tbl,a1
- move.w 0(a1,d0.w),pminlft(a0) ;pixels from the left
- lea minr_tbl,a1
- move.w 0(a1,d0.w),pminrht(a0) ;pixels from the right
- lea mint_tbl,a1
- move.w 0(a1,d0.w),pmintop(a0) ;pixels down from top
- lea minb_tbl,a1
- move.w 0(a1,d0.w),pminbot(a0) ;pixels up from bottom
- lea xover_tbl,a1
- move.w 0(a1,d0.w),pxover(a0) ;percentage of x overlap of dots
- lea yover_tbl,a1
- move.w 0(a1,d0.w),pyover(a0) ;percentage of y overlap of dots
- lea rowht_tbl,a1
- move.w 0(a1,d0.w),prowht(a0) ;rows height modula
-
- move.w 0(a1,d0.w),rowht
- lea rows_tbl,a1
- move.w 0(a1,d0.w),rows
- lea grmode_tbl,a1
- move.w 0(a1,d0.w),grmode
-
- lsl.w #1,d0
- lea maxw_tbl,a1
- move.w 0(a1,d0.w),pmaxw(a0) ;maximum # pixels across
- lea maxh_tbl,a1
- move.w 0(a1,d0.w),pmaxh(a0) ;maximum # pixels down
-
- bra prtok
-
- *
- * going to begin printing a document
- *
- p_bgndoc:
- bra prtok
-
- *
- * about to start printing of a page
- *
- p_bgnpage:
- bra prtok
-
- *
- * about to print a new tile for the page
- *
- p_bgntile:
- bra prtok
-
- *
- * print a block to the printer
- *
- p_block:
- move.l table,a0
- move.l pblockplane(a0),pplane
- move.l pblockw(a0),d0
- move.w d0,width
- move.l pblockptr(a0),a1
- move.l (a1),a1
- add.l pblockoff(a0),a1
- move.l a1,v_base
- *
- *
- move.w rows,count
- pblck2: move.l v_base,a0 ;yellow
- add.l pplane,a0
- add.l pplane,a0
- move.w #YELLOW,d0
- bsr putline
- move.l v_base,a0 ;magenta
- add.l pplane,a0
- move.w #MAGENTA,d0
- bsr putline
- move.l v_base,a0 ;cyan
- move.w #CYAN,d0
- bsr putline
- move.l v_base,a0 ;black
- add.l pplane,a0
- add.l pplane,a0
- add.l pplane,a0
- move.w #BLACK,d0
- bsr putline
-
- move.b #ESC,d0 ;one-time paper feed of 1/216"
- bsr send
- move.b #"J",d0
- bsr send
- move.b #1,d0
- bsr send
-
- moveq #0,d0
- move.w width,d0
- add.l d0,v_base
- subq.w #1,count
- bne pblck2
- *
- move.b #ESC,d0 ;already moved 1/216" down
- bsr send
- move.b #"J",d0
- bsr send
- move.w #24,d0
- sub.w rows,d0
- bra send
-
- **************************************
-
- putline:
- move.l a0,lineptr
- move.w d0,-(sp)
- lea setcolor,a0
- bsr sendline
- move.w (sp)+,d0
- bsr send
-
- move.l lineptr,a0
- move.w #0,twidth
- move.w #7,d1
- print0: move.w width,d0
- print1: tst.b -1(a0,d0.w)
- bne print2
- subq.w #1,d0
- bne print1
- print2: cmp.w twidth,d0
- blt print3
- move.w d0,twidth
- print3: move.w rows,d3
- pri1: add.w width,a0
- sub.w #1,d3
- bgt pri1
- dbf d1,print0
- *
- tst.w twidth
- beq endline
-
- move.b #ESC,d0
- bsr send
- move.w grmode,d0
- bsr send
-
- move.w twidth,d0 ;send number of graphic bytes to follow
- lsl.w #3,d0
- bsr send
- move.w twidth,d0
- lsr.w #5,d0
- bsr send
-
- move.w twidth,d2 ;length of the data in byte
- print4: move.w d2,-(sp)
- moveq #7,d4
- print6: move.w d4,pixel
- moveq #7,d1
- moveq #0,d0
- move.l lineptr,a0
- s1: btst d4,(a0)
- beq s2
- bset d1,d0
- s2:
- move.w rows,d3
- pri2:
- add.w width,a0
- sub.w #1,d3
- bgt pri2
-
- dbf d1,s1
-
- bsr send
- *
- move.w pixel,d4
- dbf d4,print6
-
- add.l #1,lineptr
- move.w (sp)+,d2
- subq.w #1,d2
- bgt print4
-
- endline:
- move.w #CR,d0
- bra send
-
- ************************************
- *
- * just finished describing current tile
- *
- p_endtile:
- move.l table,a0
- move.l pblockh(a0),d0
- mulu #160,d0
- divu pydpi(a0),d0
- move.w d0,scroll
- pend1: tst.b scroll
- beq pend2
- move.b #ESC,d0
- bsr send
- move.b #"J",d0
- bsr send
- move.b #255,d0
- bsr send
- sub.w #255,scroll
- bra pend1
- pend2: tst.w scroll
- beq prtok
- move.b #ESC,d0
- bsr send
- move.b #"J",d0
- bsr send
- move.w scroll,d0
- bra send
-
- *
- * just finished describing all tiles for this page
- *
- p_endpage:
- bra prtok
-
- *
- * finished printing the document
- *
- p_enddoc:
- bra prtok
-
- *
- * user requested stop
- *
- p_break:
- bra p_endtile
-
- ***************************************************
- *** these are the send routines for the ***
- *** dot matrix driver. ***
- ***************************************************
- *
- *
- sendline:
- move.b (a0)+,d0
- beq prtok
- move.l a0,-(sp)
- bsr send
- move.l (sp)+,a0
- bra sendline
- *
- *
- send: jmp $ffffff
- *
- *
- ***********************************
- *** ***
- ***********************************
- SECTION printer,DATA,PUBLIC
-
- prntbl: dc.l prtok,prtok,prtok,prtok,p_init
- dc.l p_bgndoc,p_bgnpage,p_bgntile
- dc.l p_block
- dc.l p_endtile,p_endpage,p_enddoc
- dc.l p_break,p_ident
-
-
- xdpi_tbl: dc.w 60,120,120,120,160,160,160
- ydpi_tbl: dc.w 72,72,144,216,72,144,216
- minl_tbl: dc.w 15,30,30,30,60,60,60
- minr_tbl: dc.w 15,30,30,30,60,60,60
- mint_tbl: dc.w 0,0,0,0,0,0,0
- minb_tbl: dc.w 0,0,0,0,0,0,0
- maxw_tbl: dc.l 480,960,960,960,1920,1920,1920
- maxh_tbl: dc.l 0,0,0,0,0,0,0
- xover_tbl: dc.w 0,0,0,0,50,50,50
- yover_tbl: dc.w 0,0,50,66,0,50,66
- rowht_tbl: dc.w 8,8,16,24,8,16,24
- rows_tbl: dc.w 1,1,2,3,1,2,3
- grmode_tbl: dc.w "K","L","L","L","Z","Z","Z"
-
-
- driver: dc.b "C-Itoh 8510SC v2.0 beta",0
- setcolor: dc.b ESC,"r",0
-
- SECTION printer,BSS,PUBLIC
- table: ds.l 1
- twidth: ds.w 1
- pixel: ds.w 1
- v_base: ds.l 1
- lineptr:ds.l 1
- width: ds.w 1
- pplane: ds.l 1
- count: ds.w 1
- grmode: ds.w 1
- rows: ds.w 1
- rowht: ds.w 1
- scroll: ds.w 1
-